 package com.cyzy.service;

import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

/**
 * 分布式锁服务接口
 */
public interface DistributedLockService {
    
    /**
     * 尝试获取锁并执行业务逻辑
     * @param lockKey 锁的键
     * @param waitTime 等待获取锁的时间
     * @param leaseTime 锁的持有时间
     * @param timeUnit 时间单位
     * @param supplier 业务逻辑
     * @return 业务逻辑执行结果
     */
    <T> T executeWithLock(String lockKey, long waitTime, long leaseTime, TimeUnit timeUnit, Supplier<T> supplier);
    
    /**
     * 尝试获取锁并执行业务逻辑（使用默认时间）
     * @param lockKey 锁的键
     * @param supplier 业务逻辑
     * @return 业务逻辑执行结果
     */
    <T> T executeWithLock(String lockKey, Supplier<T> supplier);
}